Implement business activity code to EU from Italy localization - #10233
Implement business activity code to EU from Italy localization#10233Alexander Yakunin (Alexander-Ya) wants to merge 11 commits into
Conversation
…Implement-Business-Activity-Code-from-IT
|
Could not find a linked ADO work item. Please link one by using the pattern 'AB#' followed by the relevant work item number. You may use the 'Fixes' keyword to automatically resolve the work item when the pull request is merged. E.g. 'Fixes AB#1234' |
| BusinessActivityValidator.Validate(Code); | ||
| end; | ||
|
|
||
| [IntegrationEvent(false, false)] |
There was a problem hiding this comment.
The new integration event OnGetValidator (codeunit "Business Activity Code Mgt.") does not encode its firing position or host routine per the publisher-naming convention, so a subscriber cannot tell from the symbol name where/when it fires relative to Validate(). Consider a position-encoding name such as OnValidateOnBeforeGetBusinessActivityValidator or similar.
Knowledge:
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.32.4
|
|
||
| fields | ||
| { | ||
| field(1; Code; Code[10]) |
There was a problem hiding this comment.
New table 395 "Business Activity" declares DataClassification = CustomerContent at table scope but leaves both Normal fields (Code and Description) without their own field-level DataClassification. AS0016 requires the field-level property regardless of the table-level default.
Suggested fix (apply manually — could not be anchored as a one-click suggestion):
field(1; Code; Code[10])
{
Caption = 'Code';
DataClassification = CustomerContent;
NotBlank = true;
trigger OnValidate()
var
BusinessActivityCodeMgt: Codeunit "Business Activity Code Mgt.";
begin
BusinessActivityCodeMgt.Validate(Code);
end;
}
field(2; Description; Text[100])
{
Caption = 'Description';
DataClassification = CustomerContent;
}Knowledge:
- microsoft/knowledge/privacy/table-level-data-classification-cascades.md
- microsoft/knowledge/privacy/data-classification-required-on-pii-fields.md
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.32.4
| SetBrandColorValue(); | ||
| end; | ||
| } | ||
| field(395; "Business Activity Code"; Code[10]) |
There was a problem hiding this comment.
157 new "Business Activity Code" fields added across changed table/tableextension objects omit an explicit DataClassification (for example Company Information, Purchase Header, Gen. Journal Line). AS0016 requires every Normal field to declare its own DataClassification; relying on the table-level DataClassification leaves these fields effectively unclassified for AppSourceCop/privacy tooling purposes.
Knowledge:
- microsoft/knowledge/privacy/data-classification-required-on-pii-fields.md
- microsoft/knowledge/privacy/table-level-data-classification-cascades.md
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.32.4
| UpgradeTag.SetUpgradeTag(UpgradeTagDefinitions.GetBusinessActivityCodeUpgradeTag()); | ||
| end; | ||
|
|
||
| local procedure CopyBusinessActivityCodeField(TableId: Integer; ActivityCodeFieldId: Integer) |
There was a problem hiding this comment.
IT's UpgradeBusinessActivityCodes() calls CopyBusinessActivityCodeField(TableId, ActivityCodeFieldId) for 25 tables, and the helper hard-codes the destination field number to 12189 (DataTransfer.AddFieldValue(ActivityCodeFieldId, 12189)). Only "Periodic VAT Settlement Entry" actually defines field 12189 as "Business Activity Code". Verified: "General Ledger Setup", "VAT Setup", "VAT Statement Line", and "VAT Statement Name" do not define field 12189 at all in this diff (their new field is 395, and for VAT Setup/Statement Line/Name it isn't even the same field: 395 there is "Per Business Activity Code Settl. Entry" (Boolean) or "Business Activity Code Filter", not a plain code copy target). Calling DataTransfer.CopyFields() against a nonexistent destination field 12189 will fail at runtime for these tables, breaking the IT upgrade path; the remaining ~20 tables that do use field 395 for "Business Activity Code" will silently copy into field 12189 (also nonexistent there), so no upgraded company gets its data migrated into the real field 395.
Knowledge:
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.32.4
| begin | ||
| if Code = '' then | ||
| exit; | ||
|
|
There was a problem hiding this comment.
The new publisher OnGetValidator (internal IntegrationEvent in Business Activity Code Mgt.) uses an ad-hoc name that doesn't encode its position relative to the host procedure Validate, so subscribers cannot tell from the name alone that it fires before dispatch/validation. Rename the publisher (and its IT event subscriber) to an OnBefore.../OnAfter... shape that reflects where it fires within Validate.
Knowledge:
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.32.4
| Editable = false; | ||
| FieldClass = FlowField; | ||
| } | ||
| field(395; "Business Activity Code"; Code[10]) |
There was a problem hiding this comment.
The PR adds roughly 150+ new 'Business Activity Code' (Code[10]) fields across W1 and country-layer journal, document, archive, history, VAT, and company tables (for example src/Layers/W1/BaseApp/Sales/Document/SalesHeader.Table.al, .../Purchases/Document/PurchaseHeader.Table.al, and .../Finance/GeneralLedger/Journal/GenJournalLine.Table.al) without a DataClassification property. These fields default to ToBeClassified, leaving new business/customer data unreviewed for GDPR/telemetry purposes across dozens of shipped tables in one PR.
Knowledge:
- microsoft/knowledge/privacy/data-classification-required-on-pii-fields.md
- microsoft/knowledge/privacy/table-level-data-classification-cascades.md
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.32.4
|
The changed file src/Layers/IT/BaseApp/Permissions/local.permissionset.al does not follow the ..al convention: both the object segment (local) and the type segment (permissionset) are lower-cased, hurting discoverability by tooling. Knowledge: Line mapping was unavailable, so this was posted as an issue comment. 👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.32.4 |
|
The changed file src/Layers/IT/BaseApp/Permissions/localread.permissionset.al does not follow the ..al convention: both the object segment (localread) and the type segment (permissionset) are lower-cased. Knowledge: Line mapping was unavailable, so this was posted as an issue comment. 👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.32.4 |
|
The changed file src/Layers/IT/BaseApp/Service/Local/History/ServiceInvoiceHeaderIT.tableExt.al uses a lower-cased type suffix (tableExt) instead of the canonical TableExt segment required by the ..al pattern. Knowledge: Line mapping was unavailable, so this was posted as an issue comment. 👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.32.4 |
|
|
||
| codeunit 12102 "Business Activity Code Mgt." | ||
| { | ||
| procedure Validate(Code: Code[10]) |
There was a problem hiding this comment.
The new 'Business Activity Code Mgt.' codeunit exposes a public Validate procedure without XML documentation. Add ///
Knowledge:
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.32.4
Co-authored-by: Alexander-Ya <179119309+Alexander-Ya@users.noreply.github.com>
…://github.com/microsoft/BCApps into bugs/Implement-Business-Activity-Code-from-IT
|
Table 12136 "Periodic VAT Settlement Entry" adds the replacement field "Business Activity Code", but the shipped field 1 "Activity Code" remains live with no ObsoleteState, ObsoleteReason, or ObsoleteTag. Keep the original field readable and mark it Pending so dependent extensions get the standard deprecation window before CLEAN29 cleanup. Suggested fix (apply manually — could not be anchored as a one-click suggestion): field(1; "Activity Code"; Code[6])
{
Caption = 'Activity Code';
ObsoleteReason = 'Replaced by the Business Activity Code field.';
ObsoleteState = Pending;
ObsoleteTag = '29.0';
}Knowledge: Line mapping was unavailable, so this was posted as an issue comment. 👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.32.4 |
| field(12189; "Business Activity Code"; Code[10]) | ||
| { | ||
| Caption = 'Business Activity Code'; | ||
| } |
There was a problem hiding this comment.
The new "Business Activity Code" field on "Periodic VAT Settlement Entry" lacks TableRelation = "Business Activity".Code even though every other new "Business Activity Code" field in this PR carries that relation. This drops lookup/validation for the field and allows codes that do not exist in table 395.
| field(12189; "Business Activity Code"; Code[10]) | |
| { | |
| Caption = 'Business Activity Code'; | |
| } | |
| field(12189; "Business Activity Code"; Code[10]) | |
| { | |
| Caption = 'Business Activity Code'; | |
| TableRelation = "Business Activity".Code; | |
| } |
Agent judgement — not directly backed by a BCQuality knowledge article.
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.32.4
| Editable = false; | ||
| FieldClass = FlowField; | ||
| } | ||
| field(395; "Business Activity Code"; Code[10]) |
There was a problem hiding this comment.
The PR adds 179 new Normal "Business Activity Code" fields across changed tables/tableextensions without a field-level DataClassification, relying on table scope instead. BCQuality's AS0016 guidance requires every Normal field to declare DataClassification explicitly rather than inheriting it from the table.
Knowledge:
- microsoft/knowledge/privacy/table-level-data-classification-cascades.md
- microsoft/knowledge/privacy/data-classification-required-on-pii-fields.md
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.32.4
| end; | ||
|
|
||
| #if not CLEAN29 | ||
| local procedure UpgradeBusinessActivityCodes() |
There was a problem hiding this comment.
UpgradeBusinessActivityCodes() introduces a one-time migration that creates Business Activity rows and bulk-copies the new field into many tables, but it emits no Session.LogMessage telemetry before setting the upgrade tag, leaving no upgrade-time observability for whether it ran and how much data it moved. Add explicit upgrade telemetry for this procedure (at minimum a stable event id plus success/skip/failure context and migrated row counts) before the upgrade tag is set.
Agent judgement — not directly backed by a BCQuality knowledge article.
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.32.4
| end; | ||
|
|
||
| #if not CLEAN29 | ||
| local procedure UpgradeBusinessActivityCodes() |
There was a problem hiding this comment.
The new validator paths are exercised in src/Layers/IT/Tests/Local/ITActivityCode.Codeunit.al, but this PR also adds UpgradeBusinessActivityCodes() plus 24 CopyBusinessActivityCodeField() migrations and none of the changed test files seeds legacy Activity Code data or verifies that the upgrade both creates Business Activity rows and copies old field values into the new Business Activity Code fields. Add an upgrade test that runs the upgrade against pre-upgrade data and asserts both the table migration and the DataTransfer-based field copy — this would also have caught the field-id mismatch bug found elsewhere in this review.
Agent judgement — not directly backed by a BCQuality knowledge article.
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.32.4
| GroupSettlement: Boolean; | ||
| ExceptionalEvent: Boolean; | ||
| InvalidActivityCodeFilterErr: Label 'The Activity Code Filter should contain exactly one Activity Code.'; | ||
| InvalidActivityCodeFilterErr: Label 'The Business Activity Code Filter should contain exactly one Business Activity Code.'; |
There was a problem hiding this comment.
InvalidActivityCodeFilterErr was reworded to always say "The Business Activity Code Filter should contain exactly one Business Activity Code.", but the still-active #if not CLEAN29 legacy branch (lines ~483-490) reuses the same label when validating the old "Activity Code Filter". A customer still on the legacy path who enters an invalid Activity Code Filter will see an error telling them to fix the Business Activity Code Filter instead, which is confusing and points at the wrong field.
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.33.4
| CompanyInformation.Get(); | ||
| OnGetValidator(CompanyInformation."Country/Region Code", BusinessActivityValidator, IsHandled); | ||
| if not IsHandled then |
There was a problem hiding this comment.
The new OnGetValidator override seam passes var IsHandled into the publisher without resetting it immediately before the raise. Per BCQuality guidance, add IsHandled := false; before calling the event so fallback validator selection stays deterministic and self-documenting even though the variable is freshly declared here.
| CompanyInformation.Get(); | |
| OnGetValidator(CompanyInformation."Country/Region Code", BusinessActivityValidator, IsHandled); | |
| if not IsHandled then | |
| CompanyInformation.Get(); | |
| IsHandled := false; | |
| OnGetValidator(CompanyInformation."Country/Region Code", BusinessActivityValidator, IsHandled); | |
| if not IsHandled then |
Knowledge:
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.33.4
| DataTransfer: DataTransfer; | ||
| begin | ||
| DataTransfer.SetTables(TableId, TableId); | ||
| DataTransfer.AddFieldValue(ActivityCodeFieldId, 12189); |
There was a problem hiding this comment.
UpgradeBusinessActivityCodes() hard-codes the DataTransfer destination field as 12189 in CopyBusinessActivityCodeField() for every one of its 24 call sites (Gen. Journal Line, Sales Header, Purchase Header, Company Information, VAT Entry, Service headers, etc.). Verified against the checkout: field 12189 exists only on "Periodic VAT Settlement Entry" (as "Business Activity Code"); none of the other 23 target tables have a field 12189 at all (the new field added by this PR on those tables is 395 "Business Activity Code"). DataTransfer.AddFieldValue with a destination field number that does not exist on the table will fail at runtime, so UpgradeBusinessActivityCodes() will error out on the first non-"Periodic VAT Settlement Entry" table it processes, the upgrade tag is never set, and none of the legacy "Activity Code" values are migrated into the new "Business Activity Code" field for existing customers. This blocks upgrade to this version for any company with Activity Code data.
Knowledge:
- microsoft/knowledge/upgrade/datatransfer-for-bulk-init.md
- microsoft/knowledge/upgrade/obsolete-pending-to-removed-staging.md
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.33.4
| ApplicationArea = Basic, Suite; | ||
| Visible = false; | ||
| } | ||
| #if not CLEAN29 |
There was a problem hiding this comment.
In roughly 30 IT page files, the obsolete 'Activity Code' field is wrapped in '#if not CLEAN29', but the new 'Business Activity Code' field is added immediately after '#endif' with no corresponding hide/gate. In non-CLEAN29 builds, both controls render together, which creates duplicate, confusing UI for the same concept. Keep only one of these controls visible per build/runtime path.
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.33.4
| field(395; "Business Activity Code Filter"; Code[10]) | ||
| { | ||
| Caption = 'Business Activity Code Filter'; | ||
| TableRelation = "Business Activity".Code; | ||
| } |
There was a problem hiding this comment.
The new 'Business Activity Code Filter' field on VAT Statement Line (W1) is modeled as a normal stored field instead of a FlowFilter. This table already uses FlowFilters for report-time filtering, and the IT layer's version of the same field is marked FlowFilter. Without FieldClass = FlowFilter, the value is stored as data rather than behaving as a transient filter; mark it as a FlowFilter.
| field(395; "Business Activity Code Filter"; Code[10]) | |
| { | |
| Caption = 'Business Activity Code Filter'; | |
| TableRelation = "Business Activity".Code; | |
| } | |
| field(395; "Business Activity Code Filter"; Code[10]) | |
| { | |
| Caption = 'Business Activity Code Filter'; | |
| FieldClass = FlowFilter; | |
| TableRelation = "Business Activity".Code; | |
| } |
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.33.4
|
The new 'Business Activity Code Filter' field on VAT Statement Name (W1) is modeled as a normal stored field instead of a FlowFilter. In this table, filter fields such as 'Date Filter' are FlowFilters, and the IT layer's own version of this same field correctly marks it FieldClass = FlowFilter. Leaving it as a stored field can persist filter state as data and break expected filter semantics; add FieldClass = FlowFilter. Suggested fix (apply manually — could not be anchored as a one-click suggestion): field(395; "Business Activity Code Filter"; Code[10])
{
Caption = 'Business Activity Code Filter';
FieldClass = FlowFilter;
TableRelation = "Business Activity".Code;
}Line mapping was unavailable, so this was posted as an issue comment. 👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.33.4 |
| ServHeader2."Shortcut Dimension 1 Code" := ServContract2."Shortcut Dimension 1 Code"; | ||
| ServHeader2."Shortcut Dimension 2 Code" := ServContract2."Shortcut Dimension 2 Code"; | ||
| ServHeader2."Dimension Set ID" := ServContract2."Dimension Set ID"; | ||
| ServHeader2."Business Activity Code" := ServContract2."Business Activity Code"; |
There was a problem hiding this comment.
ServContractManagement copies 'Business Activity Code' into 'Service Header' with := immediately after validating 'Location Code'. Because the target field relies on TableRelation = "Business Activity".Code and has no OnValidate, this bypasses lookup validation and gives the user no error if the contract carries a deleted or programmatically-seeded invalid code. Use Validate("Business Activity Code", ...) here (and on the analogous second assignment in this codeunit) so the copy fails fast.
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.33.4
| Caption = 'Use Concurrent Posting'; | ||
| ToolTip = 'Specifies whether to use concurrent posting when posting journals. Concurrent posting can reduce the time it takes to post journals by allowing multiple batches to be posted at the same time. Enabling this option requires additional configuration and setup, such as setting up a batch job to run the concurrent posting process and ensuring that your system has the necessary resources to support concurrent processing.'; | ||
| } | ||
| field(395; "Use Business Activity Code"; Boolean) |
There was a problem hiding this comment.
The PR also adds 15 new stored Boolean setup fields without field-level DataClassification (14 'Use Business Activity Code' fields plus BE VAT Setup's 'Per Business Activity Code Settl. Entry'). These are Normal fields, so relying on table-level classification leaves the new settings unresolved instead of explicitly classifying them for release.
Knowledge:
- microsoft/knowledge/privacy/table-level-data-classification-cascades.md
- microsoft/knowledge/privacy/resolve-tobeclassified-before-release.md
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.33.4
| @@ -1,4 +1,4 @@ | |||
| // ------------------------------------------------------------------------------------------------ | |||
| // ------------------------------------------------------------------------------------------------ | |||
There was a problem hiding this comment.
The PR mixes a broad UTF-8 BOM cleanup into the Business Activity Code feature: dozens of IT files change only the file header from '-//' to '+//' in addition to the functional edits. That encoding-only churn is unrelated to the feature, makes the review noisier, and should be reverted or moved to a separate cleanup commit.
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.33.4
|
|
||
| CurrencyCodeHandled := false; | ||
| OnPostVendorBillLineOnBeforeValidateCurrencyCode(GenJnlLine,VendorBillHeader,VendorBillLine,VendLedgEntry,Bill,AmountLCY,CurrencyCodeHandled); | ||
| OnPostVendorBillLineOnBeforeValidateCurrencyCode(GenJnlLine, VendorBillHeader, VendorBillLine, VendLedgEntry, Bill, AmountLCY, CurrencyCodeHandled); |
There was a problem hiding this comment.
A few files also fold in one-off formatting-only edits that are unrelated to the new Business Activity Code flow, for example argument-spacing cleanup and indentation fixes in VendorBillListPost.Codeunit.al and FinanceChargeMemoHeader.Table.al. Split or revert these mechanical whitespace changes so the feature diff stays focused on the actual behavior change.
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.33.4
| ServHeader2."Shortcut Dimension 1 Code" := ServContract2."Shortcut Dimension 1 Code"; | ||
| ServHeader2."Shortcut Dimension 2 Code" := ServContract2."Shortcut Dimension 2 Code"; | ||
| ServHeader2."Dimension Set ID" := ServContract2."Dimension Set ID"; | ||
| ServHeader2."Business Activity Code" := ServContract2."Business Activity Code"; |
There was a problem hiding this comment.
The PR adds 'Business Activity Code' propagation in ServContractManagement, but the changed test files only cover IT activity-code/VAT-settlement scenarios and cloud-migration metadata; none exercises the service-contract flow that creates a Service Header from a Service Contract Header. Add a regression test that creates a service contract with a business activity code, runs the two creation paths touched here, and asserts the generated service document preserves the same code, so future refactors cannot silently drop it.
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.33.4
| DataTransfer.AddFieldValue(ActivityCodeFieldId, 12189); | ||
| DataTransfer.UpdateAuditFields := false; | ||
| DataTransfer.CopyFields(); | ||
| end; |
There was a problem hiding this comment.
UpgradeBaseApp.Codeunit.al's new UpgradeBusinessActivityCodes routine calls CopyBusinessActivityCodeField(TableId, ActivityCodeFieldId) for 24 tables (Gen. Journal Line, Purchase Header, VAT Entry, Sales Header, service tables, etc.), and that helper hard-codes the DataTransfer destination field id as 12189. But the new 'Business Activity Code' field was added to all of these BaseApp tables as field 395 (see e.g. src/Layers/W1/BaseApp/Finance/GeneralLedger/Journal/GenJournalLine.Table.al); field id 12189 only exists on the IT-local 'Periodic VAT Settlement Entry' table. On upgrade, DataTransfer.CopyFields() will therefore either fail (field 12189 does not exist on these tables) or silently write into the wrong destination field, so the intended migration of existing Activity Code data into Business Activity Code is broken for every table except Periodic VAT Settlement Entry.
Knowledge:
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.33.4
| // ------------------------------------------------------------------------------------------------ | ||
| namespace Microsoft.Foundation.AuditCodes; | ||
|
|
||
| table 395 "Business Activity" |
There was a problem hiding this comment.
The new Business Activity feature adds a setup/list page and lookup-backed fields in the app's own UI, but the diff only grants tabledata "Business Activity" in the IT LOCAL/LOCAL READ permission sets (src/Layers/IT/BaseApp/Permissions/local.permissionset.al and localread.permissionset.al). No W1/BaseApp permission set grants tabledata "Business Activity", so standard non-SUPER users outside Italy can hit missing-permission failures when setting up or using this feature (e.g. via the new "Business Activities" list page or the TableRelation lookup from any document header).
Knowledge:
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.33.4
|
|
||
| asserterror BusinessActivityCode.Validate(Code, '1234567'); | ||
|
|
||
| Assert.ExpectedError('cannot be longer than 6 characters in Italy'); |
There was a problem hiding this comment.
The new negative test verifies that an error occurred, but it hardcodes the expected message text inline instead of asserting through a shared Label or helper. That makes the test brittle to wording/localization changes and weakens the reusable error contract the guidance recommends for asserterror checks.
Knowledge:
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.33.4
| { | ||
| Caption = 'Activity Code'; | ||
| } | ||
| field(12189; "Business Activity Code"; Code[10]) |
There was a problem hiding this comment.
"Periodic VAT Settlement Entry" is the only exact "Business Activity Code" table-field addition in this PR that does not follow the common shape used elsewhere: it uses field number 12189 instead of 395 and adds no TableRelation = "Business Activity".Code (it also relies on table-level DataClassification rather than a field-level one). That makes this rollout inconsistent with the rest of the PR and removes lookup/validation on the new code field; it also explains why the upgrade codeunit's hardcoded destination field 12189 happens to work only for this one table.
Suggested fix (apply manually — could not be anchored as a one-click suggestion):
field(12189; "Business Activity Code"; Code[10])
{
Caption = 'Business Activity Code';
DataClassification = CustomerContent;
TableRelation = "Business Activity".Code;
}👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.33.4
| Caption = 'Use Concurrent Posting'; | ||
| ToolTip = 'Specifies whether to use concurrent posting when posting journals. Concurrent posting can reduce the time it takes to post journals by allowing multiple batches to be posted at the same time. Enabling this option requires additional configuration and setup, such as setting up a batch job to run the concurrent posting process and ensuring that your system has the necessary resources to support concurrent processing.'; | ||
| } | ||
| field(395; "Use Business Activity Code"; Boolean) |
There was a problem hiding this comment.
14 changed "General Ledger Setup" table copies (APAC, BE, CH, DACH, ES, FR, GB, IT, NA, NL, NO, RU, SE, W1) add a Normal "Use Business Activity Code" field without field-level DataClassification. Privacy guidance requires every Normal table field to declare DataClassification explicitly.
Knowledge:
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.33.4
| { | ||
| Caption = 'Ship-To Alt. Cust. VAT Reg.'; | ||
| } | ||
| field(395; "Per Business Activity Code Settl. Entry"; Boolean) |
There was a problem hiding this comment.
The new "Per Business Activity Code Settl. Entry" field on BE's VATSetup.Table.al is a Normal field added without field-level DataClassification. Privacy guidance requires every Normal table field to declare DataClassification explicitly.
Knowledge:
👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.33.4
|
The new "Business Activity Code Filter" fields on IT's VATStatementLine.Table.al and VATStatementName.Table.al are Normal fields added without field-level DataClassification. Privacy guidance requires every Normal table field to declare DataClassification explicitly. Knowledge: Line mapping was unavailable, so this was posted as an issue comment. 👍 useful · ❤️ especially valuable · 👎 wrong - reply with why · AL review agent v1.33.4 |
What & why
Linked work
Fixes #
How I validated this
What I tested and the outcome (required — be specific: scenarios, commands, screenshots for UI changes)
Risk & compatibility